home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / UCRASM25.ARJ / STDLIB.A < prev    next >
Text File  |  1991-12-26  |  40KB  |  2,345 lines

  1. StdGrp        group    stdlib, stddata
  2. ;
  3. stddata        segment    para public 'sldata'
  4. stddata        ends
  5. stdlib        segment    para public 'slcode'
  6. stdlib        ends
  7.  
  8.  
  9.  
  10. ; Common constants and equates:
  11.  
  12. NULL        =    0
  13. bell        =    07h
  14. bs        =    08h
  15. tab        =    09h
  16. lf        =    0ah
  17. cr        =    0dh
  18.  
  19.  
  20.  
  21. ; Interface to standard library routines.
  22.  
  23.  
  24.  
  25. slcall    macro    adrs
  26.     db    09ah
  27.     dd    stdgrp:adrs
  28.     endm
  29.  
  30.  
  31.  
  32. ; Some moderately useful macros:
  33.  
  34.  
  35.  
  36. DOS    macro    opcode
  37.     ifnb    opcode
  38.     mov    ah, opcode
  39.     endif
  40.     int    21h
  41.     endm
  42.  
  43. ExitPgm    macro
  44.     mov    ah, 4ch
  45.     int    21h
  46.     endm
  47.  
  48.  
  49.  
  50.  
  51. ; Normal stdlib macros:
  52.  
  53. ;------------------------------------------------
  54. ;
  55. getc        macro
  56.         ifndef    sl_getc
  57. stdlib        segment    para public 'slcode'
  58.         extrn    sl_getc:far
  59. stdlib        ends
  60.         endif
  61.         slcall    sl_getc
  62.         endm
  63. ;
  64. ;
  65. ;
  66. GetcStdIn    macro
  67.         ifndef    sl_GetcStdIn
  68. stdlib        segment    para public 'slcode'
  69.         extrn    sl_GetcStdIn:far
  70. stdlib        ends                
  71.         endif
  72.         slcall    sl_GetcStdIn
  73.         endm
  74. ;
  75. ;
  76. ;
  77. ;
  78. GetcBIOS    macro
  79.         ifndef    sl_GetcBIOS
  80. stdlib        segment    para public 'slcode'
  81.         extrn    sl_GetcBIOS:far
  82. stdlib        ends
  83.         endif
  84.         slcall    sl_GetcBIOS
  85.         endm
  86. ;
  87. ;
  88. SetInBIOS    macro
  89.         ifndef    sl_SetInBIOS
  90. stdlib        segment    para public 'slcode'
  91.         extrn    sl_SetInBIOS:far
  92. stdlib        ends
  93.         endif
  94.         slcall    sl_SetInBIOS
  95.         endm
  96. ;
  97. SetInStd    macro
  98.         ifndef    sl_SetInStd
  99. stdlib        segment    para public 'slcode'
  100.         extrn    sl_SetInStd:far
  101. stdlib        ends
  102.         endif
  103.         slcall    sl_SetInStd
  104.         endm
  105. ;
  106. ;
  107. ;
  108. SetInAdrs    macro
  109.         ifndef    sl_SetInAdrs
  110. stdlib        segment    para public 'slcode'
  111.         extrn    sl_SetInAdrs:far
  112. stdlib        ends                
  113.         endif
  114.         slcall    sl_SetInAdrs
  115.         endm
  116. ;
  117. ;
  118. GetInAdrs    macro
  119.         ifndef    sl_GetInAdrs
  120. stdlib        segment    para public 'slcode'
  121.         extrn    sl_GetInAdrs:far
  122. stdlib        ends                
  123.         endif
  124.         slcall    sl_GetInAdrs
  125.         endm
  126. ;
  127. ;
  128. PushInAdrs    macro
  129.         ifndef    sl_PushInAdrs
  130. stdlib        segment    para public 'slcode'
  131.         extrn    sl_PushInAdrs:far
  132. stdlib        ends                
  133.         endif
  134.         slcall    sl_PushInAdrs
  135.         endm
  136. ;
  137. ;
  138. PopInAdrs    macro
  139.         ifndef    sl_PopInAdrs
  140. stdlib        segment    para public 'slcode'
  141.         extrn    sl_PopInAdrs:far
  142. stdlib        ends                
  143.         endif
  144.         slcall    sl_PopInAdrs
  145.         endm
  146. ;
  147. ;
  148. ;
  149. gets        macro
  150.         ifndef    sl_gets
  151. stdlib        segment    para public 'slcode'
  152.         extrn    sl_gets:far
  153. stdlib        ends
  154.         endif
  155.         slcall    sl_gets
  156.         endm
  157. ;
  158. getsm        macro
  159.         ifndef    sl_getsm
  160. stdlib        segment    para public 'slcode'
  161.         extrn    sl_getsm:far
  162. stdlib        ends
  163.         endif
  164.         slcall    sl_getsm
  165.         endm
  166. ;
  167. ;
  168. atol        macro
  169.         ifndef    sl_atol
  170. stdlib        segment    para public 'slcode'
  171.         extrn    sl_atol:far
  172. stdlib        ends                
  173.         endif
  174.         slcall    sl_atol
  175.         endm
  176. ;
  177. atoul        macro
  178.         ifndef    sl_atoul
  179. stdlib        segment    para public 'slcode'
  180.         extrn    sl_atoul:far
  181. stdlib        ends                
  182.         endif
  183.         slcall    sl_atoul
  184.         endm
  185. ;
  186. ;
  187. ;
  188. atol2        macro
  189.         ifndef    sl_atol2
  190. stdlib        segment    para public 'slcode'
  191.         extrn    sl_atol2:far
  192. stdlib        ends                
  193.         endif
  194.         slcall    sl_atol2
  195.         endm
  196. ;
  197. atoul2        macro
  198.         ifndef    sl_atoul2
  199. stdlib        segment    para public 'slcode'
  200.         extrn    sl_atoul2:far
  201. stdlib        ends                
  202.         endif
  203.         slcall    sl_atoul2
  204.         endm
  205. ;
  206. ;
  207. ; atoi and atou from atoi.asm
  208. ;
  209. atoi        macro
  210.         ifndef    sl_atoi
  211. stdlib        segment    para public 'slcode'
  212.         extrn    sl_atoi:far
  213. stdlib        ends                
  214.         endif
  215.         slcall    sl_atoi
  216.         endm
  217. ;
  218. atou        macro
  219.         ifndef    sl_atou
  220. stdlib        segment    para public 'slcode'
  221.         extrn    sl_atou:far
  222. stdlib        ends                
  223.         endif
  224.         slcall    sl_atou
  225.         endm
  226. ;
  227. ;
  228. atoi2        macro
  229.         ifndef    sl_atoi2
  230. stdlib        segment    para public 'slcode'
  231.         extrn    sl_atoi2:far
  232. stdlib        ends                
  233.         endif
  234.         slcall    sl_atoi2
  235.         endm
  236. ;
  237. atou2        macro
  238.         ifndef    sl_atou2
  239. stdlib        segment    para public 'slcode'
  240.         extrn    sl_atou2:far
  241. stdlib        ends                
  242.         endif
  243.         slcall    sl_atou2
  244.         endm
  245. ;
  246. ;
  247. ;
  248. atoh        macro
  249.         ifndef    sl_atoh
  250. stdlib        segment    para public 'slcode'
  251.         extrn    sl_atoh:far
  252. stdlib        ends                
  253.         endif
  254.         slcall    sl_atoh
  255.         endm
  256. ;
  257. ;
  258. atolh        macro
  259.         ifndef    sl_atolh
  260. stdlib        segment    para public 'slcode'
  261.         extrn    sl_atolh:far
  262. stdlib        ends                
  263.         endif
  264.         slcall    sl_atolh
  265.         endm
  266. ;
  267. ;
  268. atoh2        macro
  269.         ifndef    sl_atoh2
  270. stdlib        segment    para public 'slcode'
  271.         extrn    sl_atoh2:far
  272. stdlib        ends                
  273.         endif
  274.         slcall    sl_atoh2
  275.         endm
  276. ;
  277. ;
  278. atolh2        macro
  279.         ifndef    sl_atolh2
  280. stdlib        segment    para public 'slcode'
  281.         extrn    sl_atolh2:far
  282. stdlib        ends                
  283.         endif
  284.         slcall    sl_atolh2
  285.         endm
  286. ;
  287. ;
  288. ;------------------------------------------------
  289. ;
  290. ;
  291. ISize        macro
  292.         ifndef    sl_ISize
  293. stdlib        segment    para public 'slcode'
  294.         extrn    sl_ISize:far
  295. stdlib        ends                
  296.         endif
  297.         slcall    sl_Isize
  298.         endm
  299. ;
  300. USize        macro
  301.         ifndef    sl_USize
  302. stdlib        segment    para public 'slcode'
  303.         extrn    sl_USize:far
  304. stdlib        ends                
  305.         endif
  306.         slcall    sl_USize
  307.         endm
  308. ;
  309. ;
  310. ;
  311. LSize        macro
  312.         ifndef    sl_LSize
  313. stdlib        segment    para public 'slcode'
  314.         extrn    sl_LSize:far
  315. stdlib        ends                
  316.         endif
  317.         slcall    sl_Lsize
  318.         endm
  319. ;
  320. ULSize        macro
  321.         ifndef    sl_ULSize
  322. stdlib        segment    para public 'slcode'
  323.         extrn    sl_ULSize:far
  324. stdlib        ends                
  325.         endif
  326.         slcall    sl_ULSize
  327.         endm
  328. ;
  329. ;
  330. ;-----------------------------------------------------------------------
  331. ;
  332. ;
  333. Print        macro
  334.         ifndef    sl_print
  335. stdlib        segment    para public 'slcode'
  336.         extrn    sl_print:far
  337. stdlib        ends
  338.         endif
  339.         slcall    sl_print
  340.         endm
  341. ;
  342. ;---------------------------------------------------------------------------
  343. ;
  344. ;
  345. Printf        macro
  346.         ifdef    sl_printff
  347.         %out    Warning: You're using both PRINTFF and PRINTF, just use PRINTFF
  348.         endif
  349.         ifndef    sl_printf
  350. stdlib        segment    para public 'slcode'
  351.         extrn    sl_printf:far
  352. stdlib        ends                
  353.         endif
  354.         slcall    sl_printf
  355.         endm
  356. ;
  357. ;
  358. printff        macro
  359.         ifdef    sl_printf
  360.         %out    Warning: You're using both PRINTFF and PRINTF, just use PRINTFF
  361.         endif
  362.         ifndef    sl_Printff
  363. stdlib        segment    para public 'slcode'
  364.         extrn    sl_Printff:far
  365. stdlib        ends
  366.         endif
  367.         slcall    sl_Printff
  368.         endm
  369. ;
  370. ;
  371. SPrintf        macro
  372.         ifndef    sl_sprintf
  373. stdlib        segment    para public 'slcode'
  374.         extrn    sl_sprintf:far
  375.         ifndef    sp_BufSize
  376.         extrn    sp_BufSize:word
  377.         endif
  378. stdlib        ends                
  379.         endif
  380.         slcall    sl_sprintf
  381.         endm
  382. ;
  383. ;
  384. SPrintfm    macro
  385.         ifndef    sl_sprintfm
  386. stdlib        segment    para public 'slcode'
  387.         extrn    sl_sprintfm:far
  388. stdlib        ends                
  389.         endif
  390.         slcall    sl_sprintfm
  391.         endm
  392. ;
  393. ;
  394. ;
  395. Scanf        macro
  396.         ifndef    sl_scanf
  397. stdlib        segment    para public 'slcode'
  398.         extrn    sl_scanf:far
  399. stdlib        ends                
  400.         endif
  401.         slcall    sl_scanf
  402.         endm
  403. ;
  404. SScanf        macro
  405.         ifndef    sl_sscanf
  406. stdlib        segment    para public 'slcode'
  407.         extrn    sl_sscanf:far
  408. stdlib        ends                
  409.         endif
  410.         slcall    sl_sscanf
  411.         endm
  412. ;
  413. ;
  414. ;---------------------------------------------------------------------------
  415. ;
  416. ;
  417. Putc        macro
  418.         ifndef    sl_putc
  419. stdlib        segment    para public 'slcode'
  420.         extrn    sl_putc:far
  421. stdlib        ends                
  422.         endif
  423.         slcall    sl_putc
  424.         endm
  425. ;
  426. ;
  427. Putcr        macro
  428.         ifndef    sl_putcr
  429. stdlib        segment    para public 'slcode'
  430.         extrn    sl_putcr:far
  431. stdlib        ends                
  432.         endif
  433.         slcall    sl_putcr
  434.         endm
  435. ;
  436. ;
  437. ;
  438. PutcStdOut    macro
  439.         ifndef    sl_putcStdOut
  440. stdlib        segment    para public 'slcode'
  441.         extrn    sl_putcStdOut:far
  442. stdlib        ends                
  443.         endif
  444.         slcall    sl_putcStdOut
  445.         endm
  446. ;
  447. ;
  448. ;
  449. PutcBIOS    macro
  450.         ifndef    sl_putcBIOS
  451. stdlib        segment    para public 'slcode'
  452.         extrn    sl_putcBIOS:far
  453. stdlib        ends                
  454.         endif
  455.         slcall    sl_putcBIOS
  456.         endm
  457. ;
  458. ;
  459. ;
  460. SetOutAdrs    macro
  461.         ifndef    sl_SetOutAdrs
  462. stdlib        segment    para public 'slcode'
  463.         extrn    sl_SetOutAdrs:far
  464. stdlib        ends                
  465.         endif
  466.         slcall    sl_SetOutAdrs
  467.         endm
  468. ;
  469. ;
  470. GetOutAdrs    macro
  471.         ifndef    sl_GetOutAdrs
  472. stdlib        segment    para public 'slcode'
  473.         extrn    sl_GetOutAdrs:far
  474. stdlib        ends                
  475.         endif
  476.         slcall    sl_GetOutAdrs
  477.         endm
  478. ;
  479. ;
  480. PushOutAdrs    macro
  481.         ifndef    sl_PushOutAdrs
  482. stdlib        segment    para public 'slcode'
  483.         extrn    sl_PushOutAdrs:far
  484. stdlib        ends                
  485.         endif
  486.         slcall    sl_PushOutAdrs
  487.         endm
  488. ;
  489. ;
  490. PopOutAdrs    macro
  491.         ifndef    sl_PopOutAdrs
  492. stdlib        segment    para public 'slcode'
  493.         extrn    sl_PopOutAdrs:far
  494. stdlib        ends                
  495.         endif
  496.         slcall    sl_PopOutAdrs
  497.         endm
  498. ;
  499. ;
  500. PutISize    macro
  501.         ifndef    sl_putisize
  502. stdlib        segment    para public 'slcode'
  503.         extrn    sl_putisize:far
  504. stdlib        ends                
  505.         endif
  506.         slcall    sl_putisize
  507.         endm
  508. ;
  509. ;
  510. PutUSize    macro
  511.         ifndef    sl_putusize
  512. stdlib        segment    para public 'slcode'
  513.         extrn    sl_putusize:far
  514. stdlib        ends                
  515.         endif
  516.         slcall    sl_putusize
  517.         endm
  518. ;
  519. ;
  520. ;
  521. PutLSize    macro
  522.         ifndef    sl_putlsize
  523. stdlib        segment    para public 'slcode'
  524.         extrn    sl_putlsize:far
  525. stdlib        ends                
  526.         endif
  527.         slcall    sl_putlsize
  528.         endm
  529. ;
  530. ;
  531. PutULSize    macro
  532.         ifndef    sl_putulsize
  533. stdlib        segment    para public 'slcode'
  534.         extrn    sl_putulsize:far
  535. stdlib        ends                
  536.         endif
  537.         slcall    sl_putulsize
  538.         endm
  539. ;
  540. ;
  541. ;---------------------------------------------------------------------------
  542. ;
  543. ;
  544. Puts        macro
  545.         ifndef    sl_puts
  546. stdlib        segment    para public 'slcode'
  547.         extrn    sl_puts:far
  548. stdlib        ends                
  549.         endif
  550.         slcall    sl_puts
  551.         endm
  552. ;
  553. ;
  554. ;----------------------------------------------------------------------------
  555. ;
  556. ;
  557. Puth        macro
  558.         ifndef    sl_puth
  559. stdlib        segment    para public 'slcode'
  560.         extrn    sl_puth:far
  561. stdlib        ends                
  562.         endif
  563.         slcall    sl_puth
  564.         endm
  565. ;
  566. ;
  567. Putw        macro
  568.         ifndef    sl_putw
  569. stdlib        segment    para public 'slcode'
  570.         extrn    sl_putw:far
  571. stdlib        ends                
  572.         endif
  573.         slcall    sl_putw
  574.         endm
  575. ;
  576. ;---------------------------------------------------------------------------
  577. ;
  578. Puti        macro
  579.         ifndef    sl_puti
  580. stdlib        segment    para public 'slcode'
  581.         extrn    sl_puti:far
  582. stdlib        ends                
  583.         endif
  584.         slcall    sl_puti
  585.         endm
  586. ;
  587. ;
  588. Putu        macro
  589.         ifndef    sl_putu
  590. stdlib        segment    para public 'slcode'
  591.         extrn    sl_putu:far
  592. stdlib        ends                
  593.         endif
  594.         slcall    sl_putu
  595.         endm
  596. ;
  597. ;
  598. ;
  599. Putl        macro
  600.         ifndef    sl_putl
  601. stdlib        segment    para public 'slcode'
  602.         extrn    sl_putl:far
  603. stdlib        ends                
  604.         endif
  605.         slcall    sl_putl
  606.         endm
  607. ;
  608. ;
  609. PutUL        macro
  610.         ifndef    sl_putul
  611. stdlib        segment    para public 'slcode'
  612.         extrn    sl_putul:far
  613. stdlib        ends                
  614.         endif
  615.         slcall    sl_putul
  616.         endm
  617. ;
  618. ;
  619. ;--------------------------------------------------------------------------
  620. ;
  621. ;
  622. itoa        macro
  623.         ifndef    sl_itoa
  624. stdlib        segment    para public 'slcode'
  625.         extrn    sl_itoa:far
  626. stdlib        ends
  627.         endif
  628.         slcall    sl_itoa
  629.         endm
  630. ;
  631. ;
  632. itoam        macro
  633.         ifndef    sl_itoam
  634. stdlib        segment    para public 'slcode'
  635.         extrn    sl_itoam:far
  636. stdlib        ends
  637.         endif
  638.         slcall    sl_itoam
  639.         endm
  640. ;
  641. itoa2        macro
  642.         ifndef    sl_itoa2
  643. stdlib        segment    para public 'slcode'
  644.         extrn    sl_itoa2:far
  645. stdlib        ends
  646.         endif
  647.         slcall    sl_itoa2
  648.         endm
  649. ;
  650. ;
  651. utoa        macro
  652.         ifndef    sl_utoa
  653. stdlib        segment    para public 'slcode'
  654.         extrn    sl_utoa:far
  655. stdlib        ends
  656.         endif
  657.         slcall    sl_utoa
  658.         endm
  659. ;
  660. utoam        macro
  661.         ifndef    sl_utoam
  662. stdlib        segment    para public 'slcode'
  663.         extrn    sl_utoam:far
  664. stdlib        ends
  665.         endif
  666.         slcall    sl_utoam
  667.         endm
  668. ;
  669. utoa2        macro
  670.         ifndef    sl_utoa2
  671. stdlib        segment    para public 'slcode'
  672.         extrn    sl_utoa2:far
  673. stdlib        ends
  674.         endif
  675.         slcall    sl_utoa2
  676.         endm
  677. ;
  678. ;
  679. ;
  680. htoa        macro
  681.         ifndef    sl_htoa
  682. stdlib        segment    para public 'slcode'
  683.         extrn    sl_htoa:far
  684. stdlib        ends
  685.         endif
  686.         slcall    sl_htoa
  687.         endm
  688. ;
  689. htoam        macro
  690.         ifndef    sl_htoam
  691. stdlib        segment    para public 'slcode'
  692.         extrn    sl_htoam:far
  693. stdlib        ends
  694.         endif
  695.         slcall    sl_htoam
  696.         endm
  697. ;
  698. htoa2        macro
  699.         ifndef    sl_htoa2
  700. stdlib        segment    para public 'slcode'
  701.         extrn    sl_htoa2:far
  702. stdlib        ends
  703.         endif
  704.         slcall    sl_htoa2
  705.         endm
  706. ;
  707. ;
  708. wtoa        macro
  709.         ifndef    sl_wtoa
  710. stdlib        segment    para public 'slcode'
  711.         extrn    sl_wtoa:far
  712. stdlib        ends
  713.         endif
  714.         slcall    sl_wtoa
  715.         endm
  716. ;
  717. wtoam        macro
  718.         ifndef    sl_wtoam
  719. stdlib        segment    para public 'slcode'
  720.         extrn    sl_wtoam:far
  721. stdlib        ends
  722.         endif
  723.         slcall    sl_wtoam
  724.         endm
  725. ;
  726. wtoa2        macro
  727.         ifndef    sl_wtoa2
  728. stdlib        segment    para public 'slcode'
  729.         extrn    sl_wtoa2:far
  730. stdlib        ends
  731.         endif
  732.         slcall    sl_wtoa2
  733.         endm
  734. ;
  735. ;
  736. ;
  737. ltoa        macro
  738.         ifndef    sl_ltoa
  739. stdlib        segment    para public 'slcode'
  740.         extrn    sl_ltoa:far
  741. stdlib        ends
  742.         endif
  743.         slcall    sl_ltoa
  744.         endm
  745. ;
  746. ltoam        macro
  747.         ifndef    sl_ltoam
  748. stdlib        segment    para public 'slcode'
  749.         extrn    sl_ltoam:far
  750. stdlib        ends
  751.         endif
  752.         slcall    sl_ltoam
  753.         endm
  754. ;
  755. ltoa2        macro
  756.         ifndef    sl_ltoa2
  757. stdlib        segment    para public 'slcode'
  758.         extrn    sl_ltoa2:far
  759. stdlib        ends
  760.         endif
  761.         slcall    sl_ltoa2
  762.         endm
  763. ;
  764. ;
  765. ;
  766. ultoa        macro
  767.         ifndef    sl_ultoa
  768. stdlib        segment    para public 'slcode'
  769.         extrn    sl_ultoa:far
  770. stdlib        ends
  771.         endif
  772.         slcall    sl_ultoa
  773.         endm
  774. ;
  775. ultoam        macro
  776.         ifndef    sl_ultoam
  777. stdlib        segment    para public 'slcode'
  778.         extrn    sl_ultoam:far
  779. stdlib        ends
  780.         endif
  781.         slcall    sl_ultoam
  782.         endm
  783. ;
  784. ultoa2        macro
  785.         ifndef    sl_ultoa2
  786. stdlib        segment    para public 'slcode'
  787.         extrn    sl_ultoa2:far
  788. stdlib        ends
  789.         endif
  790.         slcall    sl_ultoa2
  791.         endm
  792. ;
  793. ;
  794. ;
  795. MemInit        macro
  796.         ifndef    sl_MemInit
  797. stdlib        segment    para public 'slcode'
  798.         extrn    sl_MemInit:far
  799. stdlib        ends
  800.         endif
  801.         slcall    sl_MemInit
  802.         endm
  803. ;
  804. ;
  805. ;
  806. malloc        macro
  807.         ifndef    sl_malloc
  808. stdlib        segment    para public 'slcode'
  809.         extrn    sl_malloc:far
  810. stdlib        ends
  811.         endif
  812.         slcall    sl_malloc
  813.         endm
  814. ;
  815. ;
  816. realloc        macro
  817.         ifndef    sl_realloc
  818. stdlib        segment    para public 'slcode'
  819.         extrn    sl_realloc:far
  820. stdlib        ends
  821.         endif
  822.         slcall    sl_realloc
  823.         endm
  824. ;
  825. ;
  826. DupPtr        macro
  827.         ifndef    sl_dupptr
  828. stdlib        segment    para public 'slcode'
  829.         extrn    sl_dupptr:far
  830. stdlib        ends
  831.         endif
  832.         slcall    sl_dupptr
  833.         endm
  834. ;
  835. ;
  836. free        macro
  837.         ifndef    sl_free
  838. stdlib        segment    para public 'slcode'
  839.         extrn    sl_free:far
  840. stdlib        ends
  841.         endif
  842.         slcall    sl_free
  843.         endm
  844. ;
  845. ;
  846. ;
  847. ;
  848. IsInHeap    macro
  849.         ifndef    sl_IsInHeap
  850. stdlib        segment    para public 'slcode'
  851.         extrn    sl_IsInHeap:far
  852. stdlib        ends
  853.         endif
  854.         slcall    sl_IsInHeap
  855.         endm
  856. ;
  857. ;
  858. IsPtr        macro
  859.         ifndef    sl_IsPtr
  860. stdlib        segment    para public 'slcode'
  861.         extrn    sl_IsPtr:far
  862. stdlib        ends
  863.         endif
  864.         slcall    sl_IsPtr
  865.         endm
  866. ;
  867. ;
  868. ;---------------------------------------------------------------------------
  869. ;
  870. IsAlNum        macro
  871.         ifndef    sl_IsAlNum
  872. stdlib        segment    para public 'slcode'
  873.         extrn    sl_IsAlNum:far
  874. stdlib        ends
  875.         endif
  876.         slcall    sl_IsAlNum
  877.         endm
  878. ;
  879. ;
  880. ; IsxDigit- Checks al to see if it is a hex digit.
  881. ;
  882. IsxDigit    macro
  883.         ifndef    sl_IsxDigit
  884. stdlib        segment    para public 'slcode'
  885.         extrn    sl_IsxDigit:far
  886. stdlib        ends
  887.         endif
  888.         slcall    sl_IsxDigit
  889.         endm
  890. ;
  891. ;
  892. ;
  893. ToLower        macro
  894.         local    NoCnvrt
  895.         cmp    al, 'A'
  896.         jb    NoCnvrt
  897.         cmp    al, 'Z'
  898.         ja    NoCnvrt
  899.         or    al, 20h
  900. NoCnvrt:
  901.         endm
  902. ;
  903. ;
  904. ;
  905. ToUpper        macro
  906.         local    NoCnvrt
  907.         cmp    al, 'a'
  908.         jb    NoCnvrt
  909.         cmp    al, 'z'
  910.         ja    NoCnvrt
  911.         and    al, 05fh
  912. NoCnvrt:
  913.         endm
  914. ;
  915. ;
  916. ;
  917. IsDigit        macro
  918.         local    NotDigit, IsDigit
  919.         cmp    al, '0'
  920.         jb    NotDigit         ;Note: this also clears ZF.
  921.         cmp    al, '9'
  922.         ja    NotDigit        ;Also clears ZF.
  923.         cmp    al, al            ;Set Zero flag
  924. NotDigit:
  925.         endm
  926. ;
  927. ;
  928. ;
  929. IsAlpha        macro
  930.         local    IsAl, NotAlpha
  931.         cmp    al, 'A'
  932.         jb    NotAlpha        ;Also clears ZF.
  933.         cmp    al, 'Z'
  934.         jbe    IsAl
  935.         cmp    al, 'a'
  936.         jb    NotAlpha
  937.         cmp    al, 'z'
  938.         ja    NotAlpha
  939. IsAl:        cmp    al, al            ;Set ZF.
  940. NotAlpha:
  941.         endm
  942. ;
  943. ;
  944. IsLower        macro
  945.         local    NotLower
  946.         cmp    al, 'a'
  947.         jb    NotLower
  948.         cmp    al, 'z'
  949.         ja    NotLower
  950.         cmp    al, al            ;Set ZF.
  951. NotLower:
  952.         endm
  953. ;
  954. ;
  955. ; IsUpper-    Checks to see if the character in al is upper case.
  956. ;
  957. IsUpper        macro
  958.         local    NotUpper
  959.         cmp    al, 'A'
  960.         jb    NotUpper
  961.         cmp    al, 'Z'
  962.         ja    NotUpper
  963.         cmp    al, al            ;Set ZF.
  964. NotUpper:
  965.         endm
  966. ;
  967. ;
  968. ;--------------------------------------------------------------------------
  969. ;
  970. ;
  971. strcpy        macro
  972.         ifndef    sl_strcpy
  973. stdlib        segment    para public 'slcode'
  974.         extrn    sl_strcpy:far
  975. stdlib        ends
  976.         endif
  977.         slcall    sl_strcpy
  978.         endm
  979. ;
  980. ;
  981. ;
  982. ;
  983. strcpyl        macro
  984.         ifndef    sl_strcpyl
  985. stdlib        segment    para public 'slcode'
  986.         extrn    sl_strcpyl:far
  987. stdlib        ends
  988.         endif
  989.         slcall    sl_strcpyl
  990.         endm
  991. ;
  992. ;
  993. ;
  994. strdup        macro
  995.         ifndef    sl_strdup
  996. stdlib        segment    para public 'slcode'
  997.         extrn    sl_strdup:far
  998. stdlib        ends
  999.         endif
  1000.         slcall    sl_strdup
  1001.         endm
  1002. ;
  1003. ;
  1004. ;
  1005. strdupl        macro
  1006.         ifndef    sl_strdupl
  1007. stdlib        segment    para public 'slcode'
  1008.         extrn    sl_strdupl:far
  1009. stdlib        ends
  1010.         endif
  1011.         slcall    sl_strdupl
  1012.         endm
  1013. ;
  1014. ;
  1015. strlen        macro
  1016.         ifndef    sl_strlen
  1017. stdlib        segment    para public 'slcode'
  1018.         extrn    sl_strlen:far
  1019. stdlib        ends
  1020.         endif
  1021.         slcall    sl_strlen
  1022.         endm
  1023. ;
  1024. ;
  1025. strcat        macro
  1026.         ifndef    sl_strcat
  1027. stdlib        segment    para public 'slcode'
  1028.         extrn    sl_strcat:far
  1029. stdlib        ends
  1030.         endif
  1031.         slcall    sl_strcat
  1032.         endm
  1033. ;
  1034. ;
  1035. strcatl        macro
  1036.         ifndef    sl_strcatl
  1037. stdlib        segment    para public 'slcode'
  1038.         extrn    sl_strcatl:far
  1039. stdlib        ends
  1040.         endif
  1041.         slcall    sl_strcatl
  1042.         endm
  1043. ;
  1044. ;
  1045. strcatm        macro
  1046.         ifndef    sl_strcatm
  1047. stdlib        segment    para public 'slcode'
  1048.         extrn    sl_strcatm:far
  1049. stdlib        ends
  1050.         endif
  1051.         slcall    sl_strcatm
  1052.         endm
  1053. ;
  1054. ;
  1055. ;
  1056. strcatml    macro
  1057.         ifndef    sl_strcatml
  1058. stdlib        segment    para public 'slcode'
  1059.         extrn    sl_strcatml:far
  1060. stdlib        ends
  1061.         endif
  1062.         slcall    sl_strcatml
  1063.         endm
  1064. ;
  1065. ;
  1066. ;
  1067. strchr        macro
  1068.         ifndef    sl_strchr
  1069. stdlib        segment    para public 'slcode'
  1070.         extrn    sl_strchr:far
  1071. stdlib        ends
  1072.         endif
  1073.         slcall    sl_strchr
  1074.         endm
  1075. ;
  1076. ;
  1077. strstr        macro
  1078.         ifndef    sl_strstr
  1079. stdlib        segment    para public 'slcode'
  1080.         extrn    sl_strstr:far
  1081. stdlib        ends
  1082.         endif
  1083.         slcall    sl_strstr
  1084.         endm
  1085. ;
  1086. ;
  1087. ;
  1088. strstrl        macro
  1089.         ifndef    sl_strstrl
  1090. stdlib        segment    para public 'slcode'
  1091.         extrn    sl_strstrl:far
  1092. stdlib        ends
  1093.         endif
  1094.         slcall    sl_strstrl
  1095.         endm
  1096. ;
  1097. ;
  1098. ;
  1099. strcmp        macro
  1100.         ifndef    sl_strcmp
  1101. stdlib        segment    para public 'slcode'
  1102.         extrn    sl_strcmp:far
  1103. stdlib        ends
  1104.         endif
  1105.         slcall    sl_strcmp
  1106.         endm
  1107. ;
  1108. ;
  1109. ; stricmp-    As with strcmp above, except it is case insensitive.
  1110. ;
  1111. stricmp        macro
  1112.         ifndef    sl_stricmp
  1113. stdlib        segment    para public 'slcode'
  1114.         extrn    sl_stricmp:far
  1115. stdlib        ends
  1116.         endif
  1117.         slcall    sl_stricmp
  1118.         endm
  1119. ;
  1120. ;
  1121. stricmpl    macro
  1122.         ifndef    sl_stricmpl
  1123. stdlib        segment    para public 'slcode'
  1124.         extrn    sl_stricmpl:far
  1125. stdlib        ends
  1126.         endif
  1127.         slcall    sl_stricmpl
  1128.         endm
  1129. ;
  1130. strcmpl        macro
  1131.         ifndef    sl_strcmpl
  1132. stdlib        segment    para public 'slcode'
  1133.         extrn    sl_strcmpl:far
  1134. stdlib        ends
  1135.         endif
  1136.         slcall    sl_strcmpl
  1137.         endm
  1138. ;
  1139. ;
  1140. strupr        macro
  1141.         ifndef    sl_strupr
  1142. stdlib        segment    para public 'slcode'
  1143.         extrn    sl_strupr:far
  1144. stdlib        ends
  1145.         endif
  1146.         slcall    sl_strupr
  1147.         endm
  1148. ;
  1149. ;
  1150. struprm        macro
  1151.         ifndef    sl_struprm
  1152. stdlib        segment    para public 'slcode'
  1153.         extrn    sl_struprm:far
  1154. stdlib        ends
  1155.         endif
  1156.         slcall    sl_struprm
  1157.         endm
  1158. ;
  1159. ;
  1160. strlwr        macro
  1161.         ifndef    sl_strlwr
  1162. stdlib        segment    para public 'slcode'
  1163.         extrn    sl_strlwr:far
  1164. stdlib        ends
  1165.         endif
  1166.         slcall    sl_strlwr
  1167.         endm
  1168. ;
  1169. ;
  1170. strlwrm        macro
  1171.         ifndef    sl_strlwrm
  1172. stdlib        segment    para public 'slcode'
  1173.         extrn    sl_strlwrm:far
  1174. stdlib        ends
  1175.         endif
  1176.         slcall    sl_strlwrm
  1177.         endm
  1178. ;
  1179. ;
  1180. strset        macro
  1181.         ifndef    sl_strset
  1182. stdlib        segment    para public 'slcode'
  1183.         extrn    sl_strset:far
  1184. stdlib        ends
  1185.         endif
  1186.         slcall    sl_strset
  1187.         endm
  1188. ;
  1189. ;
  1190. strsetm        macro
  1191.         ifndef    sl_strsetm
  1192. stdlib        segment    para public 'slcode'
  1193.         extrn    sl_strsetm:far
  1194. stdlib        ends
  1195.         endif
  1196.         slcall    sl_strsetm
  1197.         endm
  1198. ;
  1199. ;
  1200. strspan        macro
  1201.         ifndef    sl_strspan
  1202. stdlib        segment    para public 'slcode'
  1203.         extrn    sl_strspan:far
  1204. stdlib        ends
  1205.         endif
  1206.         slcall    sl_strspan
  1207.         endm
  1208. ;
  1209. ;
  1210. ;
  1211. strspanl    macro
  1212.         ifndef    sl_strspanl
  1213. stdlib        segment    para public 'slcode'
  1214.         extrn    sl_strspanl:far
  1215. stdlib        ends
  1216.         endif
  1217.         slcall    sl_strspanl
  1218.         endm
  1219. ;
  1220. ;
  1221. ;
  1222. strcspan    macro
  1223.         ifndef    sl_strcspan
  1224. stdlib        segment    para public 'slcode'
  1225.         extrn    sl_strcspan:far
  1226. stdlib        ends
  1227.         endif
  1228.         slcall    sl_strcspan
  1229.         endm
  1230. ;
  1231. ;
  1232. ;
  1233. strcspanl    macro
  1234.         ifndef    sl_strcspanl
  1235. stdlib        segment    para public 'slcode'
  1236.         extrn    sl_strcspanl:far
  1237. stdlib        ends
  1238.         endif
  1239.         slcall    sl_strcspanl
  1240.         endm
  1241. ;
  1242. ;
  1243. strins        macro
  1244.         ifndef    sl_strins
  1245. stdlib        segment    para public 'slcode'
  1246.         extrn    sl_strins:far
  1247. stdlib        ends
  1248.         endif
  1249.         slcall    sl_strins
  1250.         endm
  1251. ;
  1252. strinsl        macro
  1253.         ifndef    sl_strinsl
  1254. stdlib        segment    para public 'slcode'
  1255.         extrn    sl_strinsl:far
  1256. stdlib        ends
  1257.         endif
  1258.         slcall    sl_strinsl
  1259.         endm
  1260. ;
  1261. ;
  1262. strinsm        macro
  1263.         ifndef    sl_strinsm
  1264. stdlib        segment    para public 'slcode'
  1265.         extrn    sl_strinsm:far
  1266. stdlib        ends
  1267.         endif
  1268.         slcall    sl_strinsm
  1269.         endm
  1270. ;
  1271. strinsml    macro
  1272.         ifndef    sl_strinsml
  1273. stdlib        segment    para public 'slcode'
  1274.         extrn    sl_strinsml:far
  1275. stdlib        ends
  1276.         endif
  1277.         slcall    sl_strinsml
  1278.         endm
  1279. ;
  1280. strdel        macro
  1281.         ifndef    sl_strdel
  1282. stdlib        segment    para public 'slcode'
  1283.         extrn    sl_strdel:far
  1284. stdlib        ends
  1285.         endif
  1286.         slcall    sl_strdel
  1287.         endm
  1288. ;
  1289. strdelm        macro
  1290.         ifndef    sl_strdelm
  1291. stdlib        segment    para public 'slcode'
  1292.         extrn    sl_strdelm:far
  1293. stdlib        ends
  1294.         endif
  1295.         slcall    sl_strdelm
  1296.         endm
  1297. ;
  1298. strrev        macro
  1299.         ifndef    sl_strrev
  1300. stdlib        segment    para public 'slcode'
  1301.         extrn    sl_strrev:far
  1302. stdlib        ends
  1303.         endif
  1304.         slcall    sl_strrev
  1305.         endm
  1306. ;
  1307. strrevm        macro
  1308.         ifndef    sl_strrevm
  1309. stdlib        segment    para public 'slcode'
  1310.         extrn    sl_strrevm:far
  1311. stdlib        ends
  1312.         endif
  1313.         slcall    sl_strrevm
  1314.         endm
  1315. ;
  1316. ;
  1317. ;
  1318. ;
  1319. set        macro    n0,n1,n2,n3,n4,n5,n6,n7
  1320. n0        db    1
  1321. n1        db    2
  1322. n2        db    4
  1323. n3        db    8
  1324. n4        db    10h
  1325. n5        db    20h
  1326. n6        db    40h
  1327. n7        db    80h
  1328.         db    264 dup (0)
  1329.         endm
  1330. ;
  1331. ;
  1332. CreateSets    macro
  1333.         ifndef    sl_CreateSets
  1334. stdlib        segment    para public 'slcode'
  1335.         extrn    sl_CreateSets:far
  1336. stdlib        ends
  1337.         endif
  1338.         slcall    sl_CreateSets
  1339.         endm
  1340. ;
  1341. ;
  1342. EmptySet    macro
  1343.         ifndef    sl_EmptySet
  1344. stdlib        segment    para public 'slcode'
  1345.         extrn    sl_EmptySet:far
  1346. stdlib        ends
  1347.         endif
  1348.         slcall    sl_EmptySet
  1349.         endm
  1350. ;
  1351. ;
  1352. RangeSet    macro
  1353.         ifndef    sl_RangeSet
  1354. stdlib        segment    para public 'slcode'
  1355.         extrn    sl_RangeSet:far
  1356. stdlib        ends
  1357.         endif
  1358.         slcall    sl_RangeSet
  1359.         endm
  1360. ;
  1361. ;
  1362. AddStr        macro
  1363.         ifndef    sl_AddStr
  1364. stdlib        segment    para public 'slcode'
  1365.         extrn    sl_AddStr:far
  1366. stdlib        ends
  1367.         endif
  1368.         slcall    sl_AddStr
  1369.         endm
  1370. ;
  1371. ;
  1372. AddStrl        macro
  1373.         ifndef    sl_AddStrl
  1374. stdlib        segment    para public 'slcode'
  1375.         extrn    sl_AddStrl:far
  1376. stdlib        ends
  1377.         endif
  1378.         slcall    sl_AddStrl
  1379.         endm
  1380. ;
  1381. ;
  1382. RmvStr        macro
  1383.         ifndef    sl_RmvStr
  1384. stdlib        segment    para public 'slcode'
  1385.         extrn    sl_RmvStr:far
  1386. stdlib        ends
  1387.         endif
  1388.         slcall    sl_RmvStr
  1389.         endm
  1390. ;
  1391. ;
  1392. RmvStrl        macro
  1393.         ifndef    sl_RmvStrl
  1394. stdlib        segment    para public 'slcode'
  1395.         extrn    sl_RmvStrl:far
  1396. stdlib        ends
  1397.         endif
  1398.         slcall    sl_RmvStrl
  1399.         endm
  1400. ;
  1401. ;
  1402. AddChar        macro
  1403.         ifndef    sl_AddChar
  1404. stdlib        segment    para public 'slcode'
  1405.         extrn    sl_AddChar:far
  1406. stdlib        ends
  1407.         endif
  1408.         slcall    sl_AddChar
  1409.         endm
  1410. ;
  1411. ;
  1412. RmvChar        macro
  1413.         ifndef    sl_RmvChar
  1414. stdlib        segment    para public 'slcode'
  1415.         extrn    sl_RmvChar:far
  1416. stdlib        ends
  1417.         endif
  1418.         slcall    sl_RmvChar
  1419.         endm
  1420. ;
  1421. ;
  1422. Member        macro
  1423.         ifndef    sl_member
  1424. stdlib        segment    para public 'slcode'
  1425.         extrn    sl_member:far
  1426. stdlib        ends
  1427.         endif
  1428.         slcall    sl_member
  1429.         endm
  1430. ;
  1431. ;
  1432. CopySet        macro
  1433.         ifndef    sl_CopySet
  1434. stdlib        segment    para public 'slcode'
  1435.         extrn    sl_CopySet:far
  1436. stdlib        ends
  1437.         endif
  1438.         slcall    sl_CopySet
  1439.         endm
  1440. ;
  1441. ;
  1442. setunion    macro
  1443.         ifndef    sl_union
  1444. stdlib        segment    para public 'slcode'
  1445.         extrn    sl_union:far
  1446. stdlib        ends
  1447.         endif
  1448.         slcall    sl_union
  1449.         endm
  1450. ;
  1451. ;
  1452. SetIntersect    macro
  1453.         ifndef    sl_Intersect
  1454. stdlib        segment    para public 'slcode'
  1455.         extrn    sl_Intersect:far
  1456. stdlib        ends
  1457.         endif
  1458.         slcall    sl_Intersect
  1459.         endm
  1460. ;
  1461. ;
  1462. SetDifference    macro
  1463.         ifndef    sl_Difference
  1464. stdlib        segment    para public 'slcode'
  1465.         extrn    sl_Difference:far
  1466. stdlib        ends
  1467.         endif
  1468.         slcall    sl_Difference
  1469.         endm
  1470. ;
  1471. ;
  1472. NextItem    macro
  1473.         ifndef    sl_NextItem
  1474. stdlib        segment    para public 'slcode'
  1475.         extrn    sl_NextItem:far
  1476. stdlib        ends
  1477.         endif
  1478.         slcall    sl_NextItem
  1479.         endm
  1480. ;
  1481. ;
  1482. RmvItem        macro
  1483.         ifndef    sl_RmvItem
  1484. stdlib        segment    para public 'slcode'
  1485.         extrn    sl_RmvItem:far
  1486. stdlib        ends
  1487.         endif
  1488.         slcall    sl_RmvItem
  1489.         endm
  1490. ;
  1491. ;---------------------------------------------------------------------------
  1492. ;
  1493. ;
  1494. ; Macros for floating point arithmetic.
  1495. ;
  1496. ; Load single precision value into FPACC:
  1497. ;
  1498. lsfpa        macro
  1499.         ifndef    sl_lsfpa
  1500. stdlib        segment    para public 'slcode'
  1501.         extrn    sl_lsfpa:far
  1502. stdlib        ends
  1503.         endif
  1504.         slcall    sl_lsfpa
  1505.         endm
  1506. ;
  1507. ;
  1508. ; Store FPACC to a single precision value:
  1509. ;
  1510. ssfpa        macro
  1511.         ifndef    sl_ssfpa
  1512. stdlib        segment    para public 'slcode'
  1513.         extrn    sl_ssfpa:far
  1514. stdlib        ends
  1515.         endif
  1516.         slcall    sl_ssfpa
  1517.         endm
  1518. ;
  1519. ; Load double precision value into FPACC:
  1520. ;
  1521. ldfpa        macro
  1522.         ifndef    sl_ldfpa
  1523. stdlib        segment    para public 'slcode'
  1524.         extrn    sl_ldfpa:far
  1525. stdlib        ends
  1526.         endif
  1527.         slcall    sl_ldfpa
  1528.         endm
  1529. ;
  1530. ;
  1531. ; Store FPACC into a double precision variable:
  1532. ;
  1533. sdfpa        macro
  1534.         ifndef    sl_sdfpa
  1535. stdlib        segment    para public 'slcode'
  1536.         extrn    sl_sdfpa:far
  1537. stdlib        ends
  1538.         endif
  1539.         slcall    sl_sdfpa
  1540.         endm
  1541. ;
  1542. ;
  1543. ; Load extended precision value into FPACC:
  1544. ;
  1545. lefpa        macro
  1546.         ifndef    sl_lefpa
  1547. stdlib        segment    para public 'slcode'
  1548.         extrn    sl_lefpa:far
  1549. stdlib        ends
  1550.         endif
  1551.         slcall    sl_lefpa
  1552.         endm
  1553. ;
  1554. ; Load double precision value into FPACC:
  1555. ;
  1556. lefpal        macro
  1557.         ifndef    sl_lefpal
  1558. stdlib        segment    para public 'slcode'
  1559.         extrn    sl_lefpal:far
  1560. stdlib        ends
  1561.         endif
  1562.         slcall    sl_lefpal
  1563.         endm
  1564. ;
  1565. ; Store FPACC into an extended precision variable:
  1566. ;
  1567. sefpa        macro
  1568.         ifndef    sl_sefpa
  1569. stdlib        segment    para public 'slcode'
  1570.         extrn    sl_sefpa:far
  1571. stdlib        ends
  1572.         endif
  1573.         slcall    sl_sefpa
  1574.         endm
  1575. ;
  1576. ; Load single precision value into FPOP:
  1577. ;
  1578. lsfpo        macro
  1579.         ifndef    sl_lsfpo
  1580. stdlib        segment    para public 'slcode'
  1581.         extrn    sl_lsfpo:far
  1582. stdlib        ends
  1583.         endif
  1584.         slcall    sl_lsfpo
  1585.         endm
  1586. ;
  1587. ; Load double precision value into FPOP:
  1588. ;
  1589. ldfpo        macro
  1590.         ifndef    sl_ldfpo
  1591. stdlib        segment    para public 'slcode'
  1592.         extrn    sl_ldfpo:far
  1593. stdlib        ends
  1594.         endif
  1595.         slcall    sl_ldfpo
  1596.         endm
  1597. ;
  1598. ; Load extended precision value into FPOP:
  1599. ;
  1600. lefpo        macro
  1601.         ifndef    sl_lefpo
  1602. stdlib        segment    para public 'slcode'
  1603.         extrn    sl_lefpo:far
  1604. stdlib        ends
  1605.         endif
  1606.         slcall    sl_lefpo
  1607.         endm
  1608. ;
  1609. ; Load extended precision value into FPOP:
  1610. ;
  1611. lefpol        macro
  1612.         ifndef    sl_lefpol
  1613. stdlib        segment    para public 'slcode'
  1614.         extrn    sl_lefpol:far
  1615. stdlib        ends
  1616.         endif
  1617.         slcall    sl_lefpol
  1618.         endm
  1619. ;
  1620. ; ITOF-    Convert integer to floating point.
  1621. ;
  1622. itof        macro
  1623.         ifndef    sl_itof
  1624. stdlib        segment    para public 'slcode'
  1625.         extrn    sl_itof:far
  1626. stdlib        ends
  1627.         endif
  1628.         slcall    sl_itof
  1629.         endm
  1630. ;
  1631. ; UTOF-    Convert unsigned integer to floating point.
  1632. ;
  1633. utof        macro
  1634.         ifndef    sl_utof
  1635. stdlib        segment    para public 'slcode'
  1636.         extrn    sl_utof:far
  1637. stdlib        ends
  1638.         endif
  1639.         slcall    sl_utof
  1640.         endm
  1641. ;
  1642. ; ULTOF-    Convert unsigned 32-bit integer to floating point.
  1643. ;
  1644. ultof        macro
  1645.         ifndef    sl_ultof
  1646. stdlib        segment    para public 'slcode'
  1647.         extrn    sl_ultof:far
  1648. stdlib        ends
  1649.         endif
  1650.         slcall    sl_ultof
  1651.         endm
  1652. ;
  1653. ; LTOF-    Convert 32-bit signed integer to floating point.
  1654. ;
  1655. ltof        macro
  1656.         ifndef    sl_ltof
  1657. stdlib        segment    para public 'slcode'
  1658.         extrn    sl_ltof:far
  1659. stdlib        ends
  1660.         endif
  1661.         slcall    sl_ltof
  1662.         endm
  1663. ;
  1664. ; ADD FPOP to FPACC:
  1665. ;
  1666. fpadd        macro
  1667.         ifndef    sl_fadd
  1668. stdlib        segment    para public 'slcode'
  1669.         extrn    sl_fadd:far
  1670. stdlib        ends
  1671.         endif
  1672.         slcall    sl_fadd
  1673.         endm
  1674. ;
  1675. ; Subtract FPOP from FPACC:
  1676. ;
  1677. fpsub        macro
  1678.         ifndef    sl_fsub
  1679. stdlib        segment    para public 'slcode'
  1680.         extrn    sl_fsub:far
  1681. stdlib        ends
  1682.         endif
  1683.         slcall    sl_fsub
  1684.         endm
  1685. ;
  1686. ;
  1687. ; Compare FPACC to FPOP:
  1688. ;
  1689. fpcmp        macro
  1690.         ifndef    sl_fcmp
  1691. stdlib        segment    para public 'slcode'
  1692.         extrn    sl_fcmp:far
  1693. stdlib        ends
  1694.         endif
  1695.         slcall    sl_fcmp
  1696.         endm
  1697. ;
  1698. ;
  1699. ; Multiply FPACC by FPOP:
  1700. ;
  1701. fpmul        macro
  1702.         ifndef    sl_fmul
  1703. stdlib        segment    para public 'slcode'
  1704.         extrn    sl_fmul:far
  1705. stdlib        ends
  1706.         endif
  1707.         slcall    sl_fmul
  1708.         endm
  1709. ;
  1710. ;
  1711. ; Divide FPACC by FPOP:
  1712. ;
  1713. fpdiv        macro
  1714.         ifndef    sl_fdiv
  1715. stdlib        segment    para public 'slcode'
  1716.         extrn    sl_fdiv:far
  1717. stdlib        ends
  1718.         endif
  1719.         slcall    sl_fdiv
  1720.         endm
  1721. ;
  1722. ;
  1723. ; Convert FPACC to a string of digits.
  1724. ;
  1725. ftoa        macro
  1726.         ifndef    sl_ftoa
  1727. stdlib        segment    para public 'slcode'
  1728.         extrn    sl_ftoa:far
  1729. stdlib        ends
  1730.         endif
  1731.         slcall    sl_ftoa
  1732.         endm
  1733. ;
  1734. ftoa2        macro
  1735.         ifndef    sl_ftoa2
  1736. stdlib        segment    para public 'slcode'
  1737.         extrn    sl_ftoa2:far
  1738. stdlib        ends
  1739.         endif
  1740.         slcall    sl_ftoa2
  1741.         endm
  1742. ;
  1743. ftoam        macro
  1744.         ifndef    sl_ftoam
  1745. stdlib        segment    para public 'slcode'
  1746.         extrn    sl_ftoam:far
  1747. stdlib        ends
  1748.         endif
  1749.         slcall    sl_ftoam
  1750.         endm
  1751. ;
  1752. ;
  1753. ; Convert FPACC to a string of digits (scientific notation)
  1754. ;
  1755. etoa        macro
  1756.         ifndef    sl_etoa
  1757. stdlib        segment    para public 'slcode'
  1758.         extrn    sl_etoa:far
  1759. stdlib        ends
  1760.         endif
  1761.         slcall    sl_etoa
  1762.         endm
  1763. ;
  1764. etoa2        macro
  1765.         ifndef    sl_etoa2
  1766. stdlib        segment    para public 'slcode'
  1767.         extrn    sl_etoa2:far
  1768. stdlib        ends
  1769.         endif
  1770.         slcall    sl_etoa2
  1771.         endm
  1772. ;
  1773. etoam        macro
  1774.         ifndef    sl_etoam
  1775. stdlib        segment    para public 'slcode'
  1776.         extrn    sl_etoam:far
  1777. stdlib        ends
  1778.         endif
  1779.         slcall    sl_etoam
  1780.         endm
  1781. ;
  1782. ;
  1783. ;
  1784. ; Convert a string of digits (scientific notation) to FPACC
  1785. ;
  1786. atof        macro
  1787.         ifndef    sl_atof
  1788. stdlib        segment    para public 'slcode'
  1789.         extrn    sl_atof:far
  1790. stdlib        ends
  1791.         endif
  1792.         slcall    sl_atof
  1793.         endm
  1794. ;
  1795. ;
  1796. ;
  1797. ;
  1798. ftoi        macro
  1799.         ifndef    sl_ftoi
  1800. stdlib        segment    para public 'slcode'
  1801.         extrn    sl_ftoi:far
  1802. stdlib        ends
  1803.         endif
  1804.         slcall    sl_ftoi
  1805.         endm
  1806. ;
  1807. ftou        macro
  1808.         ifndef    sl_ftou
  1809. stdlib        segment    para public 'slcode'
  1810.         extrn    sl_ftou:far
  1811. stdlib        ends
  1812.         endif
  1813.         slcall    sl_ftou
  1814.         endm
  1815. ;
  1816. ftol        macro
  1817.         ifndef    sl_ftol
  1818. stdlib        segment    para public 'slcode'
  1819.         extrn    sl_ftol:far
  1820. stdlib        ends
  1821.         endif
  1822.         slcall    sl_ftol
  1823.         endm
  1824. ;
  1825. ftoul        macro
  1826.         ifndef    sl_ftoul
  1827. stdlib        segment    para public 'slcode'
  1828.         extrn    sl_ftoul:far
  1829. stdlib        ends
  1830.         endif
  1831.         slcall    sl_ftoul
  1832.         endm
  1833. ;
  1834. AccOp        macro
  1835.         ifndef    sl_AccOp
  1836. stdlib        segment    para public 'slcode'
  1837.         extrn    sl_AccOp:far
  1838. stdlib        ends
  1839.         endif
  1840.         slcall    sl_AccOp
  1841.         endm
  1842. ;
  1843. XAccOp        macro
  1844.         ifndef    sl_XAccOp
  1845. stdlib        segment    para public 'slcode'
  1846.         extrn    sl_XAccOp:far
  1847. stdlib        ends
  1848.         endif
  1849.         slcall    sl_XAccOp
  1850.         endm
  1851. ;
  1852. putf        macro
  1853.         ifndef    sl_Putf
  1854. stdlib        segment    para public 'slcode'
  1855.         extrn    sl_Putf:far
  1856. stdlib        ends
  1857.         endif
  1858.         slcall    sl_Putf
  1859.         endm
  1860. ;
  1861. pute        macro
  1862.         ifndef    sl_Pute
  1863. stdlib        segment    para public 'slcode'
  1864.         extrn    sl_Pute:far
  1865. stdlib        ends
  1866.         endif
  1867.         slcall    sl_Pute
  1868.         endm
  1869. ;
  1870. ;
  1871. ;
  1872. ;***************************************************************************
  1873. ;
  1874. ; File I/O goodies
  1875. ;
  1876. fcreate        macro
  1877.         ifndef    sl_fcreate
  1878. stdlib        segment    para public 'slcode'
  1879.         extrn    sl_fcreate:far
  1880. stdlib        ends
  1881.         endif
  1882.         slcall    sl_fcreate
  1883.         endm
  1884. ;
  1885. fopen        macro
  1886.         ifndef    sl_fopen
  1887. stdlib        segment    para public 'slcode'
  1888.         extrn    sl_fopen:far
  1889. stdlib        ends
  1890.         endif
  1891.         slcall    sl_fopen
  1892.         endm
  1893. ;
  1894. fReadOn        macro
  1895.         ifndef    sl_fReadOn
  1896. stdlib        segment    para public 'slcode'
  1897.         extrn    sl_fReadOn:far
  1898. stdlib        ends
  1899.         endif
  1900.         slcall    sl_fReadOn
  1901.         endm
  1902. ;
  1903. fReadOff    macro
  1904.         ifndef    sl_fReadOff
  1905. stdlib        segment    para public 'slcode'
  1906.         extrn    sl_fReadOff:far
  1907. stdlib        ends
  1908.         endif
  1909.         slcall    sl_fReadOff
  1910.         endm
  1911. ;
  1912. fClose        macro
  1913.         ifndef    sl_fClose
  1914. stdlib        segment    para public 'slcode'
  1915.         extrn    sl_fClose:far
  1916. stdlib        ends
  1917.         endif
  1918.         slcall    sl_fClose
  1919.         endm
  1920. ;
  1921. fFlush        macro
  1922.         ifndef    sl_fFlush
  1923. stdlib        segment    para public 'slcode'
  1924.         extrn    sl_fFlush:far
  1925. stdlib        ends
  1926.         endif
  1927.         slcall    sl_fFlush
  1928.         endm
  1929. ;
  1930. fWriteOn    macro
  1931.         ifndef    sl_fWriteOn
  1932. stdlib        segment    para public 'slcode'
  1933.         extrn    sl_fWriteOn:far
  1934. stdlib        ends
  1935.         endif
  1936.         slcall    sl_fWriteOn
  1937.         endm
  1938. ;
  1939. fWriteOff    macro
  1940.         ifndef    sl_fWriteOff
  1941. stdlib        segment    para public 'slcode'
  1942.         extrn    sl_fWriteOff:far
  1943. stdlib        ends
  1944.         endif
  1945.         slcall    sl_fWriteOff
  1946.         endm
  1947. ;
  1948. fSeek        macro
  1949.         ifndef    sl_fSeek
  1950. stdlib        segment    para public 'slcode'
  1951.         extrn    sl_fSeek:far
  1952. stdlib        ends
  1953.         endif
  1954.         slcall    sl_fSeek
  1955.         endm
  1956. ;
  1957. DOSHandle    macro
  1958.         ifndef    sl_DOSHandle
  1959. stdlib        segment    para public 'slcode'
  1960.         extrn    sl_DOSHandle:far
  1961. stdlib        ends
  1962.         endif
  1963.         slcall    sl_DOSHandle
  1964.         endm
  1965. ;
  1966. fDel        macro
  1967.         ifndef    sl_fDel
  1968. stdlib        segment    para public 'slcode'
  1969.         extrn    sl_fDel:far
  1970. stdlib        ends
  1971.         endif
  1972.         slcall    sl_fDel
  1973.         endm
  1974. ;
  1975. fRename        macro
  1976.         ifndef    sl_fRename
  1977. stdlib        segment    para public 'slcode'
  1978.         extrn    sl_fRename:far
  1979. stdlib        ends
  1980.         endif
  1981.         slcall    sl_frename
  1982.         endm
  1983. ;
  1984. ;
  1985. ;
  1986. ; Intel hex conversion routine:
  1987. ;
  1988. ToHex        macro
  1989.         ifndef    sl_ToHex
  1990. stdlib        segment    para public 'slcode'
  1991.         extrn    sl_ToHex:far
  1992. stdlib        ends
  1993.         endif
  1994.         slcall    sl_ToHex
  1995.         endm
  1996.  
  1997.  
  1998. ; ARGC- Counts the command line parameters
  1999.  
  2000. Argc        macro
  2001.         ifndef    sl_Argc
  2002. stdlib        segment    para public 'slcode'
  2003.         extrn    sl_Argc:far
  2004. stdlib        ends
  2005.         endif
  2006.         slcall    sl_Argc
  2007.         endm
  2008. ;
  2009. ; Argv-    Returns a specified cmd line parameter
  2010. ;
  2011. Argv        macro
  2012.         ifndef    sl_Argv
  2013. stdlib        segment    para public 'slcode'
  2014.         extrn    sl_Argv:far
  2015. stdlib        ends
  2016.         endif
  2017.         slcall    sl_Argv
  2018.         endm
  2019.  
  2020. ; GetEnv- Searches for an environment string:
  2021.  
  2022. GetEnv        macro
  2023.         ifndef    sl_GetEnv
  2024. stdlib        segment    para public 'slcode'
  2025.         extrn    sl_GetEnv:far
  2026. stdlib        ends
  2027.         endif
  2028.         slcall    sl_GetEnv
  2029.         endm
  2030.  
  2031.  
  2032. ; Randomize-    Randomizes the random number generator
  2033.  
  2034. Randomize    macro
  2035.         ifndef    sl_randomize
  2036. stdlib        segment    para public 'slcode'
  2037.         extrn    sl_randomize:far
  2038. stdlib        ends
  2039.         endif
  2040.         slcall    sl_randomize
  2041.         endm
  2042. ;
  2043. ;
  2044. ; Random-    Generates a random number and returns this number in AX
  2045. ;
  2046. Random        macro
  2047.         ifndef    sl_random
  2048. stdlib        segment    para public 'slcode'
  2049.         extrn    sl_random:far
  2050. stdlib        ends
  2051.         endif
  2052.         slcall    sl_random
  2053.         endm
  2054. ;
  2055. ;
  2056. ; CPUID-    Returns CPU id in AX & BX
  2057. ;
  2058. CPUID        macro
  2059.         ifndef    sl_cpuid
  2060. stdlib        segment    para public 'slcode'
  2061.         extrn    sl_cpuid:far
  2062. stdlib        ends
  2063.         endif
  2064.         slcall    sl_cpuid
  2065.         endm
  2066.  
  2067.  
  2068.  
  2069.  
  2070. ; Structured Array Stuff:
  2071.  
  2072.  
  2073.  
  2074. ; Equates for structured error return codes:
  2075.  
  2076. AryNoError    =    0            ;Should never occur
  2077. AryTypeMismatch    =    1            ;Array type mismatch
  2078. AryOverflow    =    2            ;Arithmetic overflow
  2079. AryDiv0        =    3            ;Division by zero
  2080. AryIllegalOp    =    4            ;Illegal operation on array
  2081. AryBounds    =    5            ;Array index error
  2082. AryMemory    =    6            ;Memory allocation error
  2083. AryBadDV    =    7            ;Illegal dope vector
  2084. AryNull        =    8            ;Null pointer to array data
  2085.  
  2086.  
  2087.  
  2088.  
  2089. ; Equates for defined structured array types
  2090.  
  2091. SA_untyped    =    0
  2092. SA_char        =    1
  2093. SA_boolean    =    2
  2094. SA_unsigned    =    3
  2095. SA_integer    =    4
  2096. SA_float    =    5
  2097. SA_string    =    6
  2098. SA_dv        =    7
  2099.  
  2100. SAp_untyped    =    80h
  2101. SAp_char    =    81h
  2102. SAp_boolean    =    82h
  2103. SAp_unsigned    =    83h
  2104. SAp_integer    =    84h
  2105. SAp_float    =    85h
  2106. SAp_string    =    86h
  2107. SAp_dv        =    87h
  2108.  
  2109.  
  2110.  
  2111.  
  2112. ; DopeVector gives an approximate structure for the internal composition of
  2113. ; a structured array data type.  Approximate because the last field, 
  2114. ; DimensionList, may be several words long (it varies, containing NumDimen-
  2115. ; sions words).  In general, it is not a good idea to mess with the internal
  2116. ; format of an array structure.  However, for those programs which *must*
  2117. ; tweak this stuff, it's always best to use these fields rather than numeric
  2118. ; offsets into the structure.
  2119. ;
  2120. DopeVector    struc
  2121. ArrayData    dd    ?
  2122. SizeInBytes    dw    ?
  2123. ElementSize    dw    ?
  2124. ArrayType    db    ?    ;One of the element types defined above
  2125. NumDimensions    db    ?
  2126. DimensionList    dw    ?    ;One word for each dimension
  2127. DopeVector    ends
  2128.  
  2129.  
  2130. ; WHOA!  This is a complex macro.  It lets you allocate dope vectors for a
  2131. ; structured array. See the STDLIB.TXT file for more details.
  2132.  
  2133. array        macro        name, ElementSize, AryType, Dims, InitialValues
  2134.         local        SizeDims, InitAry, NumElements
  2135. ;;
  2136. ;; First, allocate storage for the array pointer:
  2137. ;;
  2138.         align        dword            ;Align for speed.
  2139. name        dd        InitAry
  2140. ;;
  2141. ;; Count the number of dimensions and the size of the array:
  2142. ;;
  2143. SizeDims    =        0
  2144. NumElements    =        1
  2145.         ifnb        <Dims>
  2146.         irp        ThisDim,<Dims>
  2147. SizeDims    =        SizeDims+1
  2148. NumElements    =        NumElements * ThisDim
  2149.         endm
  2150. ;;
  2151. ;; Output the total number of bytes in this array:
  2152. ;;
  2153.         dw        NumElements*ElementSize
  2154. ;;
  2155. ;; Output the element size here:
  2156. ;;
  2157.         dw        ElementSize
  2158. ;;
  2159. ;; Output the type of each element here:
  2160. ;;
  2161.         db        AryType
  2162. ;;
  2163. ;; Make sure that the element size and type are compatible with one another:
  2164. ;;
  2165.         if    (AryType eq SA_char) 
  2166.         if    (ElementSize ne 1)
  2167.         %out    Character array elements must be one byte each
  2168.         .err
  2169.         endif
  2170.         endif
  2171. ;;
  2172.         if    (AryType eq SA_boolean) 
  2173.         if    (ElementSize gt 2)
  2174.         %out    Boolean array elements must be 1 or 2 bytes each
  2175.         .err
  2176.         endif
  2177.         endif
  2178. ;;
  2179.         if    (AryType eq SA_unsigned) 
  2180.         if    (ElementSize gt 4) 
  2181.         %out    Unsigned array elements must be 1, 2, or 4 bytes each
  2182.         .err
  2183.         endif
  2184.         if    ElementSize eq 3
  2185.         %out    Unsigned array elements must be 1, 2, or 4 bytes each
  2186.         .err
  2187.         endif
  2188.         endif
  2189. ;;
  2190.         if    (AryType eq SA_integer) 
  2191.         if    ElementSize gt 4
  2192.         %out    Integer array elements must be 1, 2, or 4 bytes each
  2193.         .err
  2194.         endif
  2195.         if    ElementSize eq 3
  2196.         %out    Integer array elements must be 1, 2, or 4 bytes each
  2197.         .err
  2198.         endif
  2199.         endif
  2200. ;;
  2201.         if    (AryType eq SA_float) 
  2202.         if    ElementSize ne 4
  2203.         if    ElementSize ne 8
  2204.         if    ElementSize ne 10
  2205.         %out    Float array elements must be 4, 8, or 10 bytes each
  2206.         .err
  2207.         endif
  2208.         endif
  2209.         endif
  2210.         endif
  2211. ;;
  2212. ;; Okay, output the number of dimensions:
  2213. ;;
  2214.         db        SizeDims
  2215. ;;
  2216. ;; Now output the size of each dimension:
  2217. ;;
  2218.         irp        ThisDim,<Dims>
  2219.         dw        ThisDim
  2220.         endm
  2221. ;;
  2222. ;; If there are initial values, build the array here:
  2223. ;;
  2224.         ifnb        <InitialValues>
  2225. ;;
  2226. ;; If there are a set of initial values, build the actual array
  2227. ;; immediately following the smart array data structure:
  2228. ;;
  2229. InitAry        equ        this byte
  2230. ;;
  2231. ;; The following loop repeats until we've output as many elements as
  2232. ;; are present in the array.  Note that this may be less, more, or the
  2233. ;; same number of items present in the initial values list.
  2234. ;; ExitWhen0 guarantees that we don't output too many values.
  2235. ;;
  2236. ExitWhen0    =        NumElements
  2237. ;;
  2238. ;; The following loop ensures that the output *at least* enough items to
  2239. ;; the array.  It will repeat more than once if the inital value list contains
  2240. ;; fewer elements than are needed for the actual array.
  2241. ;;
  2242.         rept        NumElements
  2243. ;;
  2244. ;; This loop processes each item in the initial list.  Note that it may
  2245. ;; terminate early if there are more items in the list than there are
  2246. ;; array elements.  By the same token, this loop may get restarted over and
  2247. ;; over again if there are fewer elements in the list than in the actual array.
  2248. ;;
  2249.         irp        ThisValue, <InitialValues>
  2250. ;;
  2251. ;; Kludge to handle different types!
  2252. ;;
  2253.         if        ElementSize eq 1
  2254.         db        ThisValue
  2255.         else
  2256.         if        ElementSize eq 2
  2257.         dw        ThisValue
  2258.         else
  2259.         if        ElementSize eq 4
  2260.         dd        ThisValue
  2261.         else
  2262.         if        ElementSize eq 8
  2263.         dq        ThisValue
  2264.         else
  2265.         if        ElementSize eq 10
  2266.         dt        ThisValue
  2267.         else
  2268.         if        ThisValue ne 0
  2269.         %out        If the element size is not 1, 2, 4, 8, or 10
  2270.         %out        then the initial values, if present, must all
  2271.         %out        be zero.
  2272.         .err
  2273.         else
  2274.         db        ElementSize dup (0)
  2275.         endif
  2276.         endif
  2277.         endif
  2278.         endif
  2279.         endif
  2280.         endif
  2281. ;;
  2282. ;; Well, we've just processed another initial value.  Check to see if we've
  2283. ;; processed all the array elements:
  2284. ;;
  2285. ExitWhen0    =        ExitWhen0 - 1
  2286.         if        ExitWhen0 eq 0
  2287.         exitm                    ;;Quit irp macro
  2288.         endif
  2289. ;;
  2290.         endm                    ;;End of IRP
  2291. ;;
  2292. ;; Two situations force the end of the IRP loop above: either we've
  2293. ;; exhausted the items in the initial values list, or we've filled the
  2294. ;; array.  At this point, check to make sure we haven't filled the array.
  2295. ;;
  2296.         if        ExitWhen0 eq 0
  2297.         exitm                    ;;Quit REPT macro.
  2298.         endif
  2299. ;;
  2300.         endm                    ;;End of REPT.
  2301. ;;
  2302. ;;
  2303. ;; If the initial values list is blank, drop down here!
  2304. ;;
  2305.         else
  2306. ;;
  2307. ;; If the user did not specify a set of initial values, initialize the
  2308. ;; array pointer to NIL:
  2309. ;;
  2310. InitAry        =        0
  2311.         endif
  2312.         else
  2313. ;;
  2314. ;; If the DIMS parameter was not present, generate an error here:
  2315. ;;
  2316.         %out        Error in ARRAY declaration, must have array bounds.
  2317.         err
  2318.         endif
  2319.         endm
  2320.  
  2321.  
  2322. ; The following opcodes are for the VectOuter, VectScalar, MatOp, and
  2323. ; AryInner routines
  2324.  
  2325. vopUser        =    0
  2326. vopPlus        =    2
  2327. vopMinus    =    4
  2328. vopMul        =    6
  2329. vopDiv        =    8
  2330. vopMod        =    10
  2331. vopAnd        =    12
  2332. vopOr        =    14
  2333. vopXor        =    16
  2334. vopEQ        =    18
  2335. vopNE        =    20
  2336. vopGE        =    22
  2337. vopGT        =    24
  2338. vopLT        =    26
  2339. vopLE        =    28
  2340. vopMin        =    30
  2341. vopMax        =    32
  2342.  
  2343.  
  2344.  
  2345.